package com.wang.web3.contracts;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Callable;
import org.web3j.abi.EventEncoder;
import org.web3j.abi.EventValues;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.Bool;
import org.web3j.abi.datatypes.DynamicArray;
import org.web3j.abi.datatypes.Event;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.generated.Uint16;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.abi.datatypes.generated.Uint64;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameter;
import org.web3j.protocol.core.RemoteCall;
import org.web3j.protocol.core.methods.request.EthFilter;
import org.web3j.protocol.core.methods.response.Log;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.tuples.generated.Tuple2;
import org.web3j.tuples.generated.Tuple6;
import org.web3j.tx.Contract;
import org.web3j.tx.TransactionManager;
import rx.Observable;
import rx.functions.Func1;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version 3.2.0.
 */
public class GirlCore extends Contract {
    private static final String BINARY = "0x60606040526000600960146101000a81548160ff021916908315150217905550341561002a57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006600c819055506001600960146101000a81548160ff02191690831515021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614853806101a06000396000f300606060405260043610610246576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054a8c0214610248578063095ea7b3146102d657806318160ddd146103185780631ba5880114610341578063232c4664146103645780632562950a146103875780632594c46d146103c957806327d7874c1461043f578063291f232f1461047857806329476394146104b35780632a6dd48f146104c85780632ba73c151461052b5780633d7d3f5a146105645780633f4ba83a146105a257806347b64eb0146105b75780634e0a3379146105f057806355156480146106295780635a3f26721461067e5780635c975abb1461070c5780635d65f76e146107395780635e01eb5a146107725780636352211e146107fa57806364e762c81461085d5780636af04a57146108865780636fbde40d146108db57806370a082311461091457806371587988146109615780638456cb591461099a578063858e77a6146109af5780638693f0f214610a125780638da5cb5b14610a3557806391876e5714610a8a5780639bd3eb4214610a9f578063a6c37ea114610adf578063a8f2f3de14610b18578063a9059cbb14610b4f578063acc8cf7114610b91578063b2e6ceeb14610bb4578063b86ed4d314610bd7578063d0e30db014610c49578063d1beaa4c14610c53578063dd1bb74814610c7c578063e6cbe35114610c91578063ea3a6ddb14610ce6578063eb04c61814610d5d578063f2fde38b14610d96578063fc5fd6e414610dcf578063ff31e93014610e24575b005b341561025357600080fd5b6102696004808035906020019091905050610e79565b604051808781526020018667ffffffffffffffff1667ffffffffffffffff1681526020018567ffffffffffffffff1667ffffffffffffffff1681526020018461ffff1661ffff16815260200183151515158152602001828152602001965050505050505060405180910390f35b34156102e157600080fd5b610316600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061100d565b005b341561032357600080fd5b61032b6111a0565b6040518082815260200191505060405180910390f35b341561034c57600080fd5b61036260048080359060200190919050506111aa565b005b341561036f57600080fd5b61038560048080359060200190919050506111e4565b005b341561039257600080fd5b6103c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611278565b005b34156103d457600080fd5b61043d60048080359060200190919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190803567ffffffffffffffff169060200190919050506112e5565b005b341561044a57600080fd5b610476600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115a6565b005b341561048357600080fd5b6104996004808035906020019091905050611646565b604051808215151515815260200191505060405180910390f35b34156104be57600080fd5b6104c661169a565b005b34156104d357600080fd5b6104e9600480803590602001909190505061172e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561053657600080fd5b610562600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061176b565b005b341561056f57600080fd5b6105a0600480803590602001909190803590602001909190803590602001909190803590602001909190505061180b565b005b34156105ad57600080fd5b6105b56119d7565b005b34156105c257600080fd5b6105ee600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a97565b005b34156105fb57600080fd5b610627600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b37565b005b341561063457600080fd5b61063c611bd7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561068957600080fd5b6106b5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611bfd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106f85780820151818401526020810190506106dd565b505050509050019250505060405180910390f35b341561071757600080fd5b61071f611c9a565b604051808215151515815260200191505060405180910390f35b341561074457600080fd5b610770600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611cad565b005b341561077d57600080fd5b610785611cf1565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b341561080557600080fd5b61081b6004808035906020019091905050611d9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561086857600080fd5b610870611e1b565b6040518082815260200191505060405180910390f35b341561089157600080fd5b610899611e81565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108e657600080fd5b610912600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611ea7565b005b341561091f57600080fd5b61094b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611fd2565b6040518082815260200191505060405180910390f35b341561096c57600080fd5b610998600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061201e565b005b34156109a557600080fd5b6109ad61213c565b005b34156109ba57600080fd5b610a106004808035906020019091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506121fd565b005b3415610a1d57600080fd5b610a336004808035906020019091905050612599565b005b3415610a4057600080fd5b610a486126f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a9557600080fd5b610a9d612718565b005b3415610aaa57600080fd5b610ac9600480803590602001909190803590602001909190505061280b565b6040518082815260200191505060405180910390f35b3415610aea57600080fd5b610b16600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c33565b005b3415610b2357600080fd5b610b396004808035906020019091905050612cd3565b6040518082815260200191505060405180910390f35b3415610b5a57600080fd5b610b8f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612eca565b005b3415610b9c57600080fd5b610bb26004808035906020019091905050612f1d565b005b3415610bbf57600080fd5b610bd5600480803590602001909190505061324f565b005b3415610be257600080fd5b610c2f60048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190505061327a565b604051808215151515815260200191505060405180910390f35b610c51613354565b005b3415610c5e57600080fd5b610c6661344f565b6040518082815260200191505060405180910390f35b3415610c8757600080fd5b610c8f613455565b005b3415610c9c57600080fd5b610ca46134ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610cf157600080fd5b610d47600480803590602001909190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050613510565b6040518082815260200191505060405180910390f35b3415610d6857600080fd5b610d94600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506138f5565b005b3415610da157600080fd5b610dcd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613995565b005b3415610dda57600080fd5b610de2613aea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610e2f57600080fd5b610e37613b14565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000806000806000806000600a8a815481101515610e9657fe5b90600052602060002090600202019250826000015498508260010160009054906101000a900467ffffffffffffffff1697508260010160089054906101000a900467ffffffffffffffff1696508260010160109054906101000a900461ffff169550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bd4ec3584600001546040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1515610f8b57600080fd5b5af11515610f9857600080fd5b505050604051805190602001805190509150915060008211610fbb576000610fbe565b60015b9450600581111515610fda5761a8c0810261a8c0019350611001565b600f81111515610ff9576201518060058203026203f480019350611000565b6211238093505b5b50505091939550919395565b6000813373ffffffffffffffffffffffffffffffffffffffff1661103082611d9d565b73ffffffffffffffffffffffffffffffffffffffff1614151561105257600080fd5b61105b83611d9d565b91508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561109857600080fd5b60006110a38461172e565b73ffffffffffffffffffffffffffffffffffffffff161415806110dd575060008473ffffffffffffffffffffffffffffffffffffffff1614155b1561119a57836003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a35b50505050565b6000600154905090565b600960159054906101000a900460ff1615156111c557600080fd5b600960149054906101000a900460ff161515156111e157600080fd5b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661122682611d9d565b73ffffffffffffffffffffffffffffffffffffffff161415151561124957600080fd5b611275600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612eca565b50565b3373ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112d457600080fd5b6112e082826001613b3a565b505050565b6000600960149054906101000a900460ff1615151561130357600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561135f57600080fd5b6000835111151561136f57600080fd5b600883511115151561138057600080fd5b61138a8484613510565b90508060658367ffffffffffffffff168115156113a357fe5b0667ffffffffffffffff161115156114d657600a848154811015156113c457fe5b9060005260206000209060020201600101601081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550507f3afab4e2c5be66d090121cfbe3028f45c031cd916c97c5c7ef882aeb940278f161143285611d9d565b85856001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019060200280838360005b838110156114bb5780820151818401526020810190506114a0565b505050509050019550505050505060405180910390a16115a0565b7f3afab4e2c5be66d090121cfbe3028f45c031cd916c97c5c7ef882aeb940278f161150085611d9d565b85856000604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019060200280838360005b8381101561158957808201518184015260208101905061156e565b505050509050019550505050505060405180910390a15b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561160257600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a8281548110151561165757fe5b906000526020600020906002020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff164267ffffffffffffffff16119050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116f657600080fd5b600960159054906101000a900460ff16151561171157600080fd5b6000600960156101000a81548160ff021916908315150217905550565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117c757600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960149054906101000a900460ff1615151561182757600080fd5b833373ffffffffffffffffffffffffffffffffffffffff1661184882611d9d565b73ffffffffffffffffffffffffffffffffffffffff1614151561186a57600080fd5b61187385611646565b151561187e57600080fd5b828411151561188c57600080fd5b6118b8600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168661100d565b6118e4600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686612eca565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a86868686336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b15156119c057600080fd5b5af115156119cd57600080fd5b5050505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a3357600080fd5b600960149054906101000a900460ff161515611a4e57600080fd5b6000600960146101000a81548160ff0219169083151502179055507f4fa58e60be3a743cbcb86c16b6e425cd4cee8702fbbcdb3721c1c08c8451fa7c60405160405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611af357600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b9357600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c056146b1565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611c8e57602002820191906000526020600020905b815481526020019060010190808311611c7a575b50505050509050919050565b600960149054906101000a900460ff1681565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635e01eb5a6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016040805180830381600087803b1515611d7857600080fd5b5af11515611d8557600080fd5b50505060405180519060200180519050915091509091565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611e1257600080fd5b80915050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e7957600080fd5b600f54905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f0557600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166385b861886040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611f6b57600080fd5b5af11515611f7857600080fd5b505050604051805190501515611f8d57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561207a57600080fd5b600960149054906101000a900460ff16151561209557600080fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561219857600080fd5b600960149054906101000a900460ff161515156121b457600080fd5b6001600960146101000a81548160ff0219169083151502179055507f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b6000600960149054906101000a900460ff1615151561221b57600080fd5b600882511115151561222c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff1661224c84611d9d565b73ffffffffffffffffffffffffffffffffffffffff1614151561226e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156122cc57600080fd5b6122d583611646565b15156122e057600080fd5b600c54600a848154811015156122f257fe5b906000526020600020906002020160010160109054906101000a900461ffff1661ffff1610151561232257600080fd5b600090505b81518110156123ab57612373600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838381518110151561236457fe5b90602001906020020151612eca565b612393828281518110151561238457fe5b90602001906020020151611646565b151561239e57600080fd5b8080600101915050612327565b60646123b78484613510565b1015156124df57600a838154811015156123cd57fe5b9060005260206000209060020201600101601081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550507f3afab4e2c5be66d090121cfbe3028f45c031cd916c97c5c7ef882aeb940278f161243b84611d9d565b84846001604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019060200280838360005b838110156124c45780820151818401526020810190506124a9565b505050509050019550505050505060405180910390a1612594565b7f892dff93b444948971a307ce1f5f9b9b6e4d380acfb998cfa3b9d594685c22ea338484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561257e578082015181840152602081019050612563565b5050505090500194505050505060405180910390a15b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156125f557600080fd5b600f54811115151561260657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600f549081150290604051600060405180830381858888f19350505050151561264857600080fd5b61265d81600f54613b5090919063ffffffff16565b600f819055507f1d7e20a3af434720a531a7785440694acdceb547ac66ab57e37f52ba0d6edee5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561277457600080fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156127f957600080fd5b5af1151561280657600080fd5b505050565b600080600080600080600960149054906101000a900460ff1615151561283057600080fd5b61283988611646565b151561284457600080fd5b61284d87611646565b151561285857600080fd5b3373ffffffffffffffffffffffffffffffffffffffff1661287889611d9d565b73ffffffffffffffffffffffffffffffffffffffff1614151561289a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166128ba88611d9d565b73ffffffffffffffffffffffffffffffffffffffff161415156128dc57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bd4ec35600a8a81548110151561292957fe5b9060005260206000209060020201600001546040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b151561298b57600080fd5b5af1151561299857600080fd5b5050506040518051906020018051905094509450600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bd4ec35600a898154811015156129f957fe5b9060005260206000209060020201600001546040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1515612a5b57600080fd5b5af11515612a6857600080fd5b5050506040518051906020018051905092509250600085111515612a8b57600080fd5b600083111515612a9a57600080fd5b612b9433600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8b1b88600a8c815481101515612aeb57fe5b906000526020600020906002020160000154600a8c815481101515612b0c57fe5b9060005260206000209060020201600001546040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050602060405180830381600087803b1515612b7657600080fd5b5af11515612b8357600080fd5b505050604051805190506001613b3a565b9050612ba08885613b69565b612baa8783613b69565b7f87ab636091865737f448ed519d0e5903f3250250974dad32b6494c2addf853c433898984604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1809550505050505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c8f57600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600960159054906101000a900460ff161515612cf457600080fd5b600960149054906101000a900460ff16151515612d1057600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166348758697600a87815481101515612d5d57fe5b9060005260206000209060020201600001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515612dc057600080fd5b5af11515612dcd57600080fd5b505050604051805190509250600a85815481101515612de857fe5b906000526020600020906002020160010160109054906101000a900461ffff1661ffff169150600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a045098c84846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050602060405180830381600087803b1515612ea657600080fd5b5af11515612eb357600080fd5b505050604051805190509050809350505050919050565b803373ffffffffffffffffffffffffffffffffffffffff16612eeb82611d9d565b73ffffffffffffffffffffffffffffffffffffffff16141515612f0d57600080fd5b612f18338484613c89565b505050565b6000806000833373ffffffffffffffffffffffffffffffffffffffff16612f4382611d9d565b73ffffffffffffffffffffffffffffffffffffffff16141515612f6557600080fd5b600960149054906101000a900460ff16151515612f8157600080fd5b612f8a85611646565b1515612f9557600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166348758697600a87815481101515612fe257fe5b9060005260206000209060020201600001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b151561304557600080fd5b5af1151561305257600080fd5b505050604051805190509350600a8581548110151561306d57fe5b906000526020600020906002020160010160109054906101000a900461ffff1692506007915060038414156130a557604b91506130c7565b60028414156130b757602391506130c6565b60018414156130c557600a91505b5b5b600a8361ffff1611156130d957600a92505b6130f66001840361ffff1660030a83613dd290919063ffffffff16565b915061310185613e0d565b7ffe2d618e048a76944a812c8efce1b16b85676e40819dd9aa11e9995239aeee9f3386604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d19a5e433846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561323057600080fd5b5af1151561323d57600080fd5b50505060405180519050505050505050565b6132593382613ee1565b151561326457600080fd5b61327761327082611d9d565b3383613c89565b50565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156132d957600080fd5b606583511015156132e957600080fd5b600090505b825181101561334a5761333c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848381518110151561332b57fe5b906020019060200201516001613b3a565b5080806001019150506132ee565b6001915050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156133b057600080fd5b34600f600082825401925050819055507fb149d1866eb107e32fd46a811a35c4b20879ded624fbf45fc30c1bf72d96170b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1565b600c5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156134b157600080fd5b600960159054906101000a900460ff161515156134cd57600080fd5b6001600960156101000a81548160ff021916908315150217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000875111151561352957600080fd5b600887511115151561353a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561359857600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166348758697600a8a8154811015156135e557fe5b9060005260206000209060020201600001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b151561364857600080fd5b5af1151561365557600080fd5b50505060405180519050945060009350600092505b8651831015613847573373ffffffffffffffffffffffffffffffffffffffff166136aa888581518110151561369b57fe5b90602001906020020151611d9d565b73ffffffffffffffffffffffffffffffffffffffff161415156136cc57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ecadd8cb600a8a81548110151561371957fe5b906000526020600020906002020160000154600a8a8781518110151561373b57fe5b9060200190602002015181548110151561375157fe5b9060005260206000209060020201600001546040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050602060405180830381600087803b15156137bb57600080fd5b5af115156137c857600080fd5b5050506040518051905091506138366001600a89868151811015156137e957fe5b906020019060200201518154811015156137ff57fe5b906000526020600020906002020160010160109054906101000a900461ffff160361ffff1660030a83613dd290919063ffffffff16565b84019350828060010193505061366a565b60149050600185141561385d5760289050613875565b600285141561386f5760649050613874565b60c890505b5b6138c06001600a8a81548110151561388957fe5b906000526020600020906002020160010160109054906101000a900461ffff160361ffff1660030a82613dd290919063ffffffff16565b90506138e8816138da606487613dd290919063ffffffff16565b613f2290919063ffffffff16565b9550505050505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561395157600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156139f057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613a2c57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000613b47838584613f3d565b90509392505050565b6000828211151515613b5e57fe5b818303905092915050565b6000600f8211151515613b7b57600080fd5b60009050600582111515613b995761a8c0820261a8c0019050613baa565b6201518060058303026203f4800190505b8067ffffffffffffffff164201600a84815481101515613bc657fe5b906000526020600020906002020160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f17091695568e914ff6f95f975c397f00a65c6a01418f9121aa7b8555dab15f4f83600a85815481101515613c2e57fe5b906000526020600020906002020160010160089054906101000a900467ffffffffffffffff16604051808381526020018267ffffffffffffffff1667ffffffffffffffff1681526020019250505060405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515613cc557600080fd5b613cce81611d9d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515613d0857600080fd5b8273ffffffffffffffffffffffffffffffffffffffff16613d2882611d9d565b73ffffffffffffffffffffffffffffffffffffffff16141515613d4a57600080fd5b613d54838261411f565b613d5e8382614208565b613d68828261448f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000806000841415613de75760009150613e06565b8284029050828482811515613df857fe5b04141515613e0257fe5b8091505b5092915050565b803373ffffffffffffffffffffffffffffffffffffffff16613e2e82611d9d565b73ffffffffffffffffffffffffffffffffffffffff16141515613e5057600080fd5b6000613e5b8361172e565b73ffffffffffffffffffffffffffffffffffffffff16141515613e8357613e82338361411f565b5b613e8d3383614208565b60003373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16613f038361172e565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000808284811515613f3057fe5b0490508091505092915050565b6000613f476146c5565b60006080604051908101604052808781526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018561ffff1681525091506001600a8054806001018281613f9c9190614706565b916000526020600020906002020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548161ffff021916908361ffff160217905550505003905061404c85826145f9565b7feb7aa166ff43c97be35b035e38a87a0fbac7de580b9c339d26258cf899b27636858288856020015186604001518760600151604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018467ffffffffffffffff1667ffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018261ffff1661ffff168152602001965050505050505060405180910390a180925050509392505050565b8173ffffffffffffffffffffffffffffffffffffffff1661413f82611d9d565b73ffffffffffffffffffffffffffffffffffffffff1614151561416157600080fd5b60006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1661422d85611d9d565b73ffffffffffffffffffffffffffffffffffffffff1614151561424f57600080fd5b60056000858152602001908152602001600020549250614281600161427387611fd2565b613b5090919063ffffffff16565b9150600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156142cf57fe5b906000526020600020900154905060006002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561437d57fe5b9060005260206000209001819055506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156143da57fe5b906000526020600020900181905550600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361443b9190614738565b506000600560008681526020019081526020016000208190555082600560008381526020019081526020016000208190555061448260018054613b5090919063ffffffff16565b6001819055505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156144fe57600080fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061455983611fd2565b9050600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816145ac9190614764565b9160005260206000209001600084909190915055508060056000848152602001908152602001600020819055506145ee6001805461469390919063ffffffff16565b600181905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561463557600080fd5b61463f828261448f565b8173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008082840190508381101515156146a757fe5b8091505092915050565b602060405190810160405280600081525090565b60806040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600061ffff1681525090565b815481835581811511614733576002028160020283600052602060002091820191016147329190614790565b5b505050565b81548183558181151161475f5781836000526020600020918201910161475e9190614802565b5b505050565b81548183558181151161478b5781836000526020600020918201910161478a9190614802565b5b505050565b6147ff91905b808211156147fb576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549061ffff021916905550600201614796565b5090565b90565b61482491905b80821115614820576000816000905550600101614808565b5090565b905600a165627a7a72305820f1ec17a67a973f20f35c40bbae7ab620dee801b87283ed72649ea5ff02a76d780029";

    protected static final HashMap<String, String> _addresses;

    static {
        _addresses = new HashMap<>();
        _addresses.put("5777", "0xf25186b5081ff5ce73482ad761db0eb0d25abfbf");
    }

    protected GirlCore(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected GirlCore(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public List<ContractUpgradeEventResponse> getContractUpgradeEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("ContractUpgrade", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<ContractUpgradeEventResponse> responses = new ArrayList<ContractUpgradeEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            ContractUpgradeEventResponse typedResponse = new ContractUpgradeEventResponse();
            typedResponse.newAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<ContractUpgradeEventResponse> contractUpgradeEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("ContractUpgrade", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, ContractUpgradeEventResponse>() {
            @Override
            public ContractUpgradeEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                ContractUpgradeEventResponse typedResponse = new ContractUpgradeEventResponse();
                typedResponse.newAddress = (String) eventValues.getNonIndexedValues().get(0).getValue();
                return typedResponse;
            }
        });
    }

    public List<RecycleGirlEventResponse> getRecycleGirlEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("RecycleGirl", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<RecycleGirlEventResponse> responses = new ArrayList<RecycleGirlEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            RecycleGirlEventResponse typedResponse = new RecycleGirlEventResponse();
            typedResponse.user = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.tokenId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.price = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<RecycleGirlEventResponse> recycleGirlEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("RecycleGirl", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, RecycleGirlEventResponse>() {
            @Override
            public RecycleGirlEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                RecycleGirlEventResponse typedResponse = new RecycleGirlEventResponse();
                typedResponse.user = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.tokenId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                typedResponse.price = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
                return typedResponse;
            }
        });
    }

    public List<DepositRecycleBalanceEventResponse> getDepositRecycleBalanceEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("DepositRecycleBalance", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<DepositRecycleBalanceEventResponse> responses = new ArrayList<DepositRecycleBalanceEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            DepositRecycleBalanceEventResponse typedResponse = new DepositRecycleBalanceEventResponse();
            typedResponse.CFO = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<DepositRecycleBalanceEventResponse> depositRecycleBalanceEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("DepositRecycleBalance", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, DepositRecycleBalanceEventResponse>() {
            @Override
            public DepositRecycleBalanceEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                DepositRecycleBalanceEventResponse typedResponse = new DepositRecycleBalanceEventResponse();
                typedResponse.CFO = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                return typedResponse;
            }
        });
    }

    public List<WithDrawBalanceEventResponse> getWithDrawBalanceEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("WithDrawBalance", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<WithDrawBalanceEventResponse> responses = new ArrayList<WithDrawBalanceEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            WithDrawBalanceEventResponse typedResponse = new WithDrawBalanceEventResponse();
            typedResponse.CFO = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<WithDrawBalanceEventResponse> withDrawBalanceEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("WithDrawBalance", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, WithDrawBalanceEventResponse>() {
            @Override
            public WithDrawBalanceEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                WithDrawBalanceEventResponse typedResponse = new WithDrawBalanceEventResponse();
                typedResponse.CFO = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                return typedResponse;
            }
        });
    }

    public List<SummonEventResponse> getSummonEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Summon", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<SummonEventResponse> responses = new ArrayList<SummonEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            SummonEventResponse typedResponse = new SummonEventResponse();
            typedResponse.ownner = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.token1 = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.token2 = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.newTokenId = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<SummonEventResponse> summonEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Summon", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, SummonEventResponse>() {
            @Override
            public SummonEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                SummonEventResponse typedResponse = new SummonEventResponse();
                typedResponse.ownner = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.token1 = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                typedResponse.token2 = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
                typedResponse.newTokenId = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
                return typedResponse;
            }
        });
    }

    public List<StrengEventResponse> getStrengEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Streng", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicArray<Uint256>>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<StrengEventResponse> responses = new ArrayList<StrengEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            StrengEventResponse typedResponse = new StrengEventResponse();
            typedResponse.sender = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.mainTokenId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.sacrificeId = (List<BigInteger>) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<StrengEventResponse> strengEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Streng", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicArray<Uint256>>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, StrengEventResponse>() {
            @Override
            public StrengEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                StrengEventResponse typedResponse = new StrengEventResponse();
                typedResponse.sender = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.mainTokenId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                typedResponse.sacrificeId = (List<BigInteger>) eventValues.getNonIndexedValues().get(2).getValue();
                return typedResponse;
            }
        });
    }

    public List<DecompositionEventResponse> getDecompositionEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Decomposition", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<DecompositionEventResponse> responses = new ArrayList<DecompositionEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            DecompositionEventResponse typedResponse = new DecompositionEventResponse();
            typedResponse.sender = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.tokenId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<DecompositionEventResponse> decompositionEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Decomposition", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, DecompositionEventResponse>() {
            @Override
            public DecompositionEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                DecompositionEventResponse typedResponse = new DecompositionEventResponse();
                typedResponse.sender = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.tokenId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                return typedResponse;
            }
        });
    }

    public List<StrengStatusEventResponse> getStrengStatusEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("StrengStatus", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<Bool>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<StrengStatusEventResponse> responses = new ArrayList<StrengStatusEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            StrengStatusEventResponse typedResponse = new StrengStatusEventResponse();
            typedResponse.sender = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.mainTokenId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.sacrificeId = (List<BigInteger>) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.status = (Boolean) eventValues.getNonIndexedValues().get(3).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<StrengStatusEventResponse> strengStatusEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("StrengStatus", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<Bool>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, StrengStatusEventResponse>() {
            @Override
            public StrengStatusEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                StrengStatusEventResponse typedResponse = new StrengStatusEventResponse();
                typedResponse.sender = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.mainTokenId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                typedResponse.sacrificeId = (List<BigInteger>) eventValues.getNonIndexedValues().get(2).getValue();
                typedResponse.status = (Boolean) eventValues.getNonIndexedValues().get(3).getValue();
                return typedResponse;
            }
        });
    }

    public List<CreateGirlEventResponse> getCreateGirlEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("CreateGirl", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint16>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<CreateGirlEventResponse> responses = new ArrayList<CreateGirlEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            CreateGirlEventResponse typedResponse = new CreateGirlEventResponse();
            typedResponse.owner = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.tokenID = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.genes = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.birthTime = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.cooldownEndTime = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.starLevel = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<CreateGirlEventResponse> createGirlEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("CreateGirl", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint16>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, CreateGirlEventResponse>() {
            @Override
            public CreateGirlEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                CreateGirlEventResponse typedResponse = new CreateGirlEventResponse();
                typedResponse.owner = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.tokenID = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                typedResponse.genes = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
                typedResponse.birthTime = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
                typedResponse.cooldownEndTime = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue();
                typedResponse.starLevel = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue();
                return typedResponse;
            }
        });
    }

    public List<CoolDownEventResponse> getCoolDownEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("CoolDown", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint64>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<CoolDownEventResponse> responses = new ArrayList<CoolDownEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            CoolDownEventResponse typedResponse = new CoolDownEventResponse();
            typedResponse.tokenId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.cooldownEndTime = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<CoolDownEventResponse> coolDownEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("CoolDown", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint64>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, CoolDownEventResponse>() {
            @Override
            public CoolDownEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                CoolDownEventResponse typedResponse = new CoolDownEventResponse();
                typedResponse.tokenId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.cooldownEndTime = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                return typedResponse;
            }
        });
    }

    public List<PausedEventResponse> getPausedEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Paused", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList());
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<PausedEventResponse> responses = new ArrayList<PausedEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            PausedEventResponse typedResponse = new PausedEventResponse();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<PausedEventResponse> pausedEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Paused", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList());
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, PausedEventResponse>() {
            @Override
            public PausedEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                PausedEventResponse typedResponse = new PausedEventResponse();
                return typedResponse;
            }
        });
    }

    public List<UnausedEventResponse> getUnausedEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Unaused", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList());
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<UnausedEventResponse> responses = new ArrayList<UnausedEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            UnausedEventResponse typedResponse = new UnausedEventResponse();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<UnausedEventResponse> unausedEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Unaused", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList());
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, UnausedEventResponse>() {
            @Override
            public UnausedEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                UnausedEventResponse typedResponse = new UnausedEventResponse();
                return typedResponse;
            }
        });
    }

    public List<TransferEventResponse> getTransferEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Transfer", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<TransferEventResponse> responses = new ArrayList<TransferEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            TransferEventResponse typedResponse = new TransferEventResponse();
            typedResponse._from = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse._to = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse._tokenId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<TransferEventResponse> transferEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Transfer", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, TransferEventResponse>() {
            @Override
            public TransferEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                TransferEventResponse typedResponse = new TransferEventResponse();
                typedResponse._from = (String) eventValues.getIndexedValues().get(0).getValue();
                typedResponse._to = (String) eventValues.getIndexedValues().get(1).getValue();
                typedResponse._tokenId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
                return typedResponse;
            }
        });
    }

    public List<ApprovalEventResponse> getApprovalEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Approval", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<ApprovalEventResponse> responses = new ArrayList<ApprovalEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            ApprovalEventResponse typedResponse = new ApprovalEventResponse();
            typedResponse._owner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse._approved = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse._tokenId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<ApprovalEventResponse> approvalEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Approval", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, ApprovalEventResponse>() {
            @Override
            public ApprovalEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                ApprovalEventResponse typedResponse = new ApprovalEventResponse();
                typedResponse._owner = (String) eventValues.getIndexedValues().get(0).getValue();
                typedResponse._approved = (String) eventValues.getIndexedValues().get(1).getValue();
                typedResponse._tokenId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
                return typedResponse;
            }
        });
    }

    public List<OwnershipTransferredEventResponse> getOwnershipTransferredEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("OwnershipTransferred", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}),
                Arrays.<TypeReference<?>>asList());
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<OwnershipTransferredEventResponse> responses = new ArrayList<OwnershipTransferredEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse();
            typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<OwnershipTransferredEventResponse> ownershipTransferredEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("OwnershipTransferred", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}),
                Arrays.<TypeReference<?>>asList());
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, OwnershipTransferredEventResponse>() {
            @Override
            public OwnershipTransferredEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse();
                typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue();
                typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue();
                return typedResponse;
            }
        });
    }

    public RemoteCall<TransactionReceipt> approve(String _to, BigInteger _tokenId) {
        Function function = new Function(
                "approve", 
                Arrays.<Type>asList(new Address(_to),
                new Uint256(_tokenId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<BigInteger> totalSupply() {
        Function function = new Function("totalSupply", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> recycleGirl(BigInteger _girlId) {
        Function function = new Function(
                "recycleGirl", 
                Arrays.<Type>asList(new Uint256(_girlId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> transferToCOO(BigInteger _tokenId) {
        Function function = new Function(
                "transferToCOO", 
                Arrays.<Type>asList(new Uint256(_tokenId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> strengFromServer(BigInteger _token1, List<BigInteger> _token2, BigInteger _random) {
        Function function = new Function(
                "strengFromServer", 
                Arrays.<Type>asList(new Uint256(_token1),
                new DynamicArray<Uint256>(
                        org.web3j.abi.Utils.typeMap(_token2, Uint256.class)),
                new Uint64(_random)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setCEO(String _newCEO) {
        Function function = new Function(
                "setCEO", 
                Arrays.<Type>asList(new Address(_newCEO)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<Boolean> isNotCoolDown(BigInteger _girlId) {
        Function function = new Function("isNotCoolDown", 
                Arrays.<Type>asList(new Uint256(_girlId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<TransactionReceipt> stopRecycle() {
        Function function = new Function(
                "stopRecycle", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> approvedFor(BigInteger _tokenId) {
        Function function = new Function("approvedFor", 
                Arrays.<Type>asList(new Uint256(_tokenId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> setCOO(String _newCOO) {
        Function function = new Function(
                "setCOO", 
                Arrays.<Type>asList(new Address(_newCOO)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> createSaleAuction(BigInteger _GirlId, BigInteger _startingPrice, BigInteger _endingPrice, BigInteger _duration) {
        Function function = new Function(
                "createSaleAuction", 
                Arrays.<Type>asList(new Uint256(_GirlId),
                new Uint256(_startingPrice),
                new Uint256(_endingPrice),
                new Uint256(_duration)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> unpause() {
        Function function = new Function(
                "unpause", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setServerAddress(String _newServerAddress) {
        Function function = new Function(
                "setServerAddress", 
                Arrays.<Type>asList(new Address(_newServerAddress)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setCFO(String _newCFO) {
        Function function = new Function(
                "setCFO", 
                Arrays.<Type>asList(new Address(_newCFO)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> genesFactory() {
        Function function = new Function("genesFactory", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<List> tokensOf(String _owner) {
        Function function = new Function("tokensOf", 
                Arrays.<Type>asList(new Address(_owner)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}));
        return executeRemoteCallSingleValueReturn(function, List.class);
    }

    public RemoteCall<Boolean> paused() {
        Function function = new Function("paused", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<TransactionReceipt> setGenesFactory(String _genesAddress) {
        Function function = new Function(
                "setGenesFactory", 
                Arrays.<Type>asList(new Address(_genesAddress)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<Tuple2<String, String>> getSender() {
        final Function function = new Function("getSender", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}));
        return new RemoteCall<Tuple2<String, String>>(
                new Callable<Tuple2<String, String>>() {
                    @Override
                    public Tuple2<String, String> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);;
                        return new Tuple2<String, String>(
                                (String) results.get(0).getValue(), 
                                (String) results.get(1).getValue());
                    }
                });
    }

    public RemoteCall<String> ownerOf(BigInteger _tokenId) {
        Function function = new Function("ownerOf", 
                Arrays.<Type>asList(new Uint256(_tokenId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<BigInteger> getRecycleBalance() {
        Function function = new Function("getRecycleBalance", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> newContractAddress() {
        Function function = new Function("newContractAddress", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> setSaleAuctionAddress(String _address) {
        Function function = new Function(
                "setSaleAuctionAddress", 
                Arrays.<Type>asList(new Address(_address)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<BigInteger> balanceOf(String _owner) {
        Function function = new Function("balanceOf", 
                Arrays.<Type>asList(new Address(_owner)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> pause() {
        Function function = new Function(
                "pause", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> triggerStreng(BigInteger _mainTokenId, List<BigInteger> _sacrificeId) {
        Function function = new Function(
                "triggerStreng", 
                Arrays.<Type>asList(new Uint256(_mainTokenId),
                new DynamicArray<Uint256>(
                        org.web3j.abi.Utils.typeMap(_sacrificeId, Uint256.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> withdrawRecycleBalance(BigInteger _amount) {
        Function function = new Function(
                "withdrawRecycleBalance", 
                Arrays.<Type>asList(new Uint256(_amount)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> owner() {
        Function function = new Function("owner", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> withdrawAuctionBalances() {
        Function function = new Function(
                "withdrawAuctionBalances", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> summon(BigInteger _token1, BigInteger _token2) {
        Function function = new Function(
                "summon", 
                Arrays.<Type>asList(new Uint256(_token1),
                new Uint256(_token2)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setMagicKeyFactory(String _factoryAddress) {
        Function function = new Function(
                "setMagicKeyFactory", 
                Arrays.<Type>asList(new Address(_factoryAddress)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<BigInteger> getSaleBackPrice(BigInteger _girlId) {
        Function function = new Function("getSaleBackPrice", 
                Arrays.<Type>asList(new Uint256(_girlId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> transfer(String _to, BigInteger _tokenId) {
        Function function = new Function(
                "transfer", 
                Arrays.<Type>asList(new Address(_to),
                new Uint256(_tokenId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> decomposition(BigInteger _tokenId) {
        Function function = new Function(
                "decomposition", 
                Arrays.<Type>asList(new Uint256(_tokenId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> takeOwnership(BigInteger _tokenId) {
        Function function = new Function(
                "takeOwnership", 
                Arrays.<Type>asList(new Uint256(_tokenId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> deposit(BigInteger weiValue) {
        Function function = new Function(
                "deposit", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function, weiValue);
    }

    public RemoteCall<BigInteger> maxStarLevel() {
        Function function = new Function("maxStarLevel", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> startRecycle() {
        Function function = new Function(
                "startRecycle", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> saleAuction() {
        Function function = new Function("saleAuction", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<BigInteger> getSuccessRate(BigInteger _token1, List<BigInteger> _token2) {
        Function function = new Function("getSuccessRate", 
                Arrays.<Type>asList(new Uint256(_token1),
                new DynamicArray<Uint256>(
                        org.web3j.abi.Utils.typeMap(_token2, Uint256.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> transferOwnership(String newOwner) {
        Function function = new Function(
                "transferOwnership", 
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> prizePoolAddress() {
        Function function = new Function("prizePoolAddress", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public static RemoteCall<GirlCore> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(GirlCore.class, web3j, credentials, gasPrice, gasLimit, BINARY, "");
    }

    public static RemoteCall<GirlCore> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(GirlCore.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, "");
    }

    public RemoteCall<TransactionReceipt> setNewAddress(String _v2Address) {
        Function function = new Function(
                "setNewAddress", 
                Arrays.<Type>asList(new Address(_v2Address)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> mintGirl(List<BigInteger> genes) {
        Function function = new Function(
                "mintGirl", 
                Arrays.<Type>asList(new DynamicArray<Uint256>(
                        org.web3j.abi.Utils.typeMap(genes, Uint256.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> mintGirlFromPrizePool(String _to, BigInteger _gene) {
        Function function = new Function(
                "mintGirlFromPrizePool", 
                Arrays.<Type>asList(new Address(_to),
                new Uint256(_gene)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<Tuple6<BigInteger, BigInteger, BigInteger, BigInteger, Boolean, BigInteger>> getGirl(BigInteger _id) {
        final Function function = new Function("getGirl", 
                Arrays.<Type>asList(new Uint256(_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint16>() {}, new TypeReference<Bool>() {}, new TypeReference<Uint256>() {}));
        return new RemoteCall<Tuple6<BigInteger, BigInteger, BigInteger, BigInteger, Boolean, BigInteger>>(
                new Callable<Tuple6<BigInteger, BigInteger, BigInteger, BigInteger, Boolean, BigInteger>>() {
                    @Override
                    public Tuple6<BigInteger, BigInteger, BigInteger, BigInteger, Boolean, BigInteger> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);;
                        return new Tuple6<BigInteger, BigInteger, BigInteger, BigInteger, Boolean, BigInteger>(
                                (BigInteger) results.get(0).getValue(), 
                                (BigInteger) results.get(1).getValue(), 
                                (BigInteger) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (Boolean) results.get(4).getValue(), 
                                (BigInteger) results.get(5).getValue());
                    }
                });
    }

    public RemoteCall<String> getCOO() {
        Function function = new Function("getCOO", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> setPrizePoolAddress(String _prizePoolAddress) {
        Function function = new Function(
                "setPrizePoolAddress", 
                Arrays.<Type>asList(new Address(_prizePoolAddress)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public static GirlCore load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new GirlCore(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    public static GirlCore load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new GirlCore(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected String getStaticDeployedAddress(String networkId) {
        return _addresses.get(networkId);
    }

    public static String getPreviouslyDeployedAddress(String networkId) {
        return _addresses.get(networkId);
    }

    public static class ContractUpgradeEventResponse {
        public String newAddress;
    }

    public static class RecycleGirlEventResponse {
        public String user;

        public BigInteger tokenId;

        public BigInteger price;
    }

    public static class DepositRecycleBalanceEventResponse {
        public String CFO;

        public BigInteger amount;
    }

    public static class WithDrawBalanceEventResponse {
        public String CFO;

        public BigInteger amount;
    }

    public static class SummonEventResponse {
        public String ownner;

        public BigInteger token1;

        public BigInteger token2;

        public BigInteger newTokenId;
    }

    public static class StrengEventResponse {
        public String sender;

        public BigInteger mainTokenId;

        public List<BigInteger> sacrificeId;
    }

    public static class DecompositionEventResponse {
        public String sender;

        public BigInteger tokenId;
    }

    public static class StrengStatusEventResponse {
        public String sender;

        public BigInteger mainTokenId;

        public List<BigInteger> sacrificeId;

        public Boolean status;
    }

    public static class CreateGirlEventResponse {
        public String owner;

        public BigInteger tokenID;

        public BigInteger genes;

        public BigInteger birthTime;

        public BigInteger cooldownEndTime;

        public BigInteger starLevel;
    }

    public static class CoolDownEventResponse {
        public BigInteger tokenId;

        public BigInteger cooldownEndTime;
    }

    public static class PausedEventResponse {
    }

    public static class UnausedEventResponse {
    }

    public static class TransferEventResponse {
        public String _from;

        public String _to;

        public BigInteger _tokenId;
    }

    public static class ApprovalEventResponse {
        public String _owner;

        public String _approved;

        public BigInteger _tokenId;
    }

    public static class OwnershipTransferredEventResponse {
        public String previousOwner;

        public String newOwner;
    }
}
